package com.eastfair.venuebooking.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.eastfair.core.base.entity.Entity;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import static com.eastfair.core.utils.DateUtils.DEFAULT_DATE_TIME_FORMAT;
import com.eastfair.annotation.model.EchoVO;

import static com.baomidou.mybatisplus.annotation.SqlCondition.LIKE;

/**
 * <p>
 * 实体类
 * 客户归属记录表
 * </p>
 *
 * @author clm
 * @since 2022-06-10
 */
@Data
@NoArgsConstructor
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("vb_belong_record")
@ApiModel(value = "BelongRecord", description = "客户归属记录表")
@AllArgsConstructor
public class BelongRecord extends Entity<Long> implements EchoVO {

    private static final long serialVersionUID = 1L;
    @TableField(exist = false)
    private Map<String, Object> echoMap = new HashMap<>();
    /**
     * 是否启用：1是；0否
     */
    @ApiModelProperty(value = "是否启用：1是；0否")
    @TableField(value = "is_enabled")
    @Excel(name = "是否启用：1是；0否")
    private Integer isEnabled;

    /**
     * 是否删除：1是；0否
     */
    @ApiModelProperty(value = "是否删除：1是；0否")
    @TableField(value = "is_deleted")
    @Excel(name = "是否删除：1是；0否")
    private Integer isDeleted;

    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @TableField(value = "project_id")
    @Excel(name = "项目id")
    private Long projectId;

    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    @TableField(value = "subsystem_id")
    @Excel(name = "子系统id")
    private Long subsystemId;

    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    @TableField(value = "tenant_id")
    @Excel(name = "租户id")
    private Long tenantId;

    /**
     * 目前归属人id
     */
    @ApiModelProperty(value = "目前归属人id")
    @TableField(value = "now_belong_id")
    @Excel(name = "目前归属人id")
    private Long nowBelongId;

    /**
     * 目前归属名称
     */
    @ApiModelProperty(value = "目前归属名称")
    @Size(max = 64, message = "目前归属名称长度不能超过64")
    @TableField(value = "now_belong_name", condition = LIKE)
    @Excel(name = "目前归属名称")
    private String nowBelongName;

    /**
     * 原来归属
     */
    @ApiModelProperty(value = "原来归属")
    @TableField(value = "past_belong_id")
    @Excel(name = "原来归属")
    private Long pastBelongId;

    /**
     * 原来归属名称
     */
    @ApiModelProperty(value = "原来归属名称")
    @Size(max = 64, message = "原来归属名称长度不能超过64")
    @TableField(value = "past_belong_name", condition = LIKE)
    @Excel(name = "原来归属名称")
    private String pastBelongName;

    /**
     * 操作方式(数据字典)
     */
    @ApiModelProperty(value = "操作方式(数据字典)")
    @Size(max = 64, message = "操作方式(数据字典)长度不能超过64")
    @TableField(value = "operate_type", condition = LIKE)
    @Excel(name = "操作方式(数据字典)")
    private String operateType;

    /**
     * 客户id，线索id，商机id
     */
    @ApiModelProperty(value = "客户id，线索id，商机id")
    @TableField(value = "business_id")
    @Excel(name = "客户id，线索id，商机id")
    private Long businessId;

    /**
     * 模块名(枚举维护)
     */
    @ApiModelProperty(value = "模块名(枚举维护)")
    @Size(max = 255, message = "模块名(枚举维护)长度不能超过255")
    @TableField(value = "business_type", condition = LIKE)
    @Excel(name = "模块名(枚举维护)")
    private String businessType;

    /**
     * 操作人id
     */
    @ApiModelProperty(value = "操作人id")
    @TableField(value = "operater_id")
    @Excel(name = "操作人id")
    private Long operaterId;

    /**
     * 操作人名称
     */
    @ApiModelProperty(value = "操作人名称")
    @Size(max = 255, message = "操作人名称长度不能超过255")
    @TableField(value = "operater_name", condition = LIKE)
    @Excel(name = "操作人名称")
    private String operaterName;

    /**
     * 保护起始
     */
    @ApiModelProperty(value = "保护起始")
    @TableField(value = "protect_start")
    @Excel(name = "保护起始", format = DEFAULT_DATE_TIME_FORMAT, width = 20)
    private LocalDateTime protectStart;

    /**
     * 保护截止
     */
    @ApiModelProperty(value = "保护截止")
    @TableField(value = "protect_end")
    @Excel(name = "保护截止", format = DEFAULT_DATE_TIME_FORMAT, width = 20)
    private LocalDateTime protectEnd;

    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    @Size(max = 1000, message = "备注长度不能超过1000")
    @TableField(value = "remark", condition = LIKE)
    @Excel(name = "备注")
    private String remark;


    @Builder
    public BelongRecord(Long id, Long createdBy, LocalDateTime createTime, Long updatedBy, LocalDateTime updateTime, 
                    Integer isEnabled, Integer isDeleted, Long projectId, Long subsystemId, Long tenantId, 
                    Long nowBelongId, String nowBelongName, Long pastBelongId, String pastBelongName, String operateType, Long businessId, 
                    String businessType, Long operaterId, String operaterName, LocalDateTime protectStart, LocalDateTime protectEnd, String remark) {
        this.id = id;
        this.createdBy = createdBy;
        this.createTime = createTime;
        this.updatedBy = updatedBy;
        this.updateTime = updateTime;
        this.isEnabled = isEnabled;
        this.isDeleted = isDeleted;
        this.projectId = projectId;
        this.subsystemId = subsystemId;
        this.tenantId = tenantId;
        this.nowBelongId = nowBelongId;
        this.nowBelongName = nowBelongName;
        this.pastBelongId = pastBelongId;
        this.pastBelongName = pastBelongName;
        this.operateType = operateType;
        this.businessId = businessId;
        this.businessType = businessType;
        this.operaterId = operaterId;
        this.operaterName = operaterName;
        this.protectStart = protectStart;
        this.protectEnd = protectEnd;
        this.remark = remark;
    }

}
